package com.shield.framework.security.token;

import com.shield.framework.config.ShieldConstant;
import com.shield.framework.security.auth.AuthUser;
import net.dreamlu.mica.core.utils.StringUtil;

import javax.servlet.http.HttpServletRequest;
import java.time.Duration;
import java.util.Date;

/**
 * 令牌生成类型
 */
public interface ShieldTokenService {

    /**
     * 从request中解析token
     */
    default String getToken(HttpServletRequest request){
        // 1. 获取请求头携带的令牌
        String tokenHeaderKey = ShieldConstant.HEADER;
        String token = request.getHeader(tokenHeaderKey);
        // 2. 获取参数传递的 token
        if (StringUtil.isBlank(token)) {
            token = request.getParameter(tokenHeaderKey);
        }
        // 3. 解析 Bearer token
        if (StringUtil.isNotBlank(token) && token.startsWith(ShieldConstant.TOKEN_PREFIX)) {
            token = token.substring(ShieldConstant.TOKEN_PREFIX.length());
        }
        // 4. 如果为空返回
        if (StringUtil.isBlank(token)) {
            return null;
        }
        return token;
    }

    /**
     * 解析token数据 jwt适用
     * */
    String getSubject(String token);


    /**
     * 生成token
     * */
    String createToken(AuthUser authUser, Date now, Duration expireTime);
}
